 # 导包
import unittest, requests

#创建继承unittest.TestCase的类
class TestLgshopLogin(unittest.TestCase):

    # unittest框架的测试固件
    def setUp(self):
        # 实例化session对象
        self.session = requests.Session()
        # 验证码URL
        self.url_verify = "http://localhost/index.php?m=Home&c=User&a=verify&r=0.9698092918823165"
        # 登录的URL
        self.url_login = "http://localhost/index.php?m=Home&c=User&a=do_login&t=0.8916582864091132"

    # 编写登录成功测试用例
    def test001_login_success(self):
        # 使用session对象发送验证码接口请求(session发送请求的方式和requests一模一样，区别就是我们是使用session对象发送请求)
        response = self.session.get(url=self.url_verify)
        # print(response.content)
        # print(response.cookies)
        # 使用session对象发送登录接口请求
        response = self.session.post(url=self.url_login,
                                     data={"username": "13800138006", "password": "123456", "verify_code": "8888"},
                                     headers={"Content-Type": "application/x-www-form-urlencoded"})
        # 打印登录的结果
        print(response.json())
        # 断言登录的结果
        self.assertEqual(1, response.json().get("status"))
        self.assertEqual(200, response.status_code)
        self.assertEqual("登陆成功", response.json().get("msg"))


    # 编写手机号码未注册测试用例
    def test002_username_is_not_regist(self):
        # 使用session对象发送验证码接口请求(session发送请求的方式和requests一模一样，区别就是我们是使用session对象发送请求)
        response = self.session.get(url=self.url_verify)
        # print(response.content)
        # print(response.cookies)
        # 使用session对象发送登录接口请求
        response = self.session.post(url=self.url_login,
                                     data={"username": "14100138006", "password": "123456", "verify_code": "8888"},
                                     headers={"Content-Type": "application/x-www-form-urlencoded"})
        # 打印登录的结果
        print(response.json())

        # 断言登录的结果
        self.assertEqual(-1, response.json().get("status"))
        self.assertEqual("账号不存在!", response.json().get("msg"))

    # 密码错误测试用例
    def test003_password_is_error(self):
        # 使用session对象发送验证码接口请求(session发送请求的方式和requests一模一样，区别就是我们是使用session对象发送请求)
        response = self.session.get(url=self.url_verify)
        # print(response.content)
        # print(response.cookies)
        # 使用session对象发送登录接口请求
        response = self.session.post(url=self.url_login,
                                     data={"username": "13800138006", "password": "1234567", "verify_code": "8888"},
                                     headers={"Content-Type": "application/x-www-form-urlencoded"})
        # 打印登录的结果
        print(response.json())

        # 断言登录的结果
        self.assertEqual(-2, response.json().get("status"))
        self.assertEqual("密码错误!", response.json().get("msg"))

    # 验证码错误
    def test004_verify_code_is_error(self):
        # 使用session对象发送验证码接口请求(session发送请求的方式和requests一模一样，区别就是我们是使用session对象发送请求)
        response = self.session.get(url=self.url_verify)
        # print(response.content)
        # print(response.cookies)
        # 使用session对象发送登录接口请求
        response = self.session.post(url=self.url_login,
                                     data={"username": "13800138006", "password": "123456", "verify_code": "1234"},
                                     headers={"Content-Type": "application/x-www-form-urlencoded"})
        # 打印登录的结果
        print(response.json())

        # 断言登录的结果
        self.assertEqual(0, response.json().get("status"))
        self.assertEqual("验证码错误", response.json().get("msg"))


    # 验证码失效/令牌失效（他们两个是同一个）
    def test005_verify_code_is_invalid(self):
        # 验证码失效：获取验证码之后，返回的令牌失效；我们调用登陆时，填写的令牌错误也会失效
        response = requests.post(url=self.url_login,
                                 data={"username": "13800138006", "password": "123456", "verify_code": "8888"},
                                 headers={"Content-Type": "application/x-www-form-urlencoded"},
                                 cookies={"PHPSESSID": "gd3ej8pqfnocudjl4tp4nl3le7"})


        # 查看结果
        print(response.json())
        # 断言登录的结果:验证码接口返回的令牌失效，意味着服务器不认为我们获取了验证码，所以服务器会返回验证码错误
        self.assertEqual(0, response.json().get("status"))
        self.assertEqual("验证码错误", response.json().get("msg"))



